local PublicDataFunc={}

--说明: 获取结构数据中指定元素的值
--输入		structVal		需要获取的结构体数据	CMvVariant
--输入		structMemberName		指定的元素		字符串
--返回值		isSuc		获取是否成功		布尔值
--返回值		val			指定元素的值
function PublicDataFunc:GetValInStruct(structVal,structMemberName)
	local isSuc=false
	local val=CMvVariant()
	local type=structVal:getDataType()
	--点	x	y
	if(type==cyDType.cyDT_RealPoint)then
		if(structMemberName=="x")then
			val=structVal.x
			isSuc=true
		elseif(structMemberName=="y")then
			val=structVal.y
			isSuc=true
		end
	end
	--姿态	x	y	angle
	if(type==cyDType.cyDT_Posture)then
		if(structMemberName=="x")then
			val=structVal.x
			isSuc=true
		elseif(structMemberName=="y")then
			val=structVal.y
			isSuc=true
		elseif(structMemberName=="angle")then
			val=structVal.angle
			isSuc=true
		end
	end
	--直线	xStart	yStart	xEnd	yEnd
	if(type==cyDType.cyDT_Line)then
		if(structMemberName=="xStart")then
			val=structVal.xStart
			isSuc=true
		elseif(structMemberName=="yStart")then
			val=structVal.yStart
			isSuc=true
		elseif(structMemberName=="xEnd")then
			val=structVal.xEnd
			isSuc=true
		elseif(structMemberName=="yEnd")then
			val=structVal.yEnd
			isSuc=true
		end
	end
	--矩形	left	top	width		height
	if(type==cyDType.cyDT_Rect)then
		if(structMemberName=="left")then
			val=structVal.left
			isSuc=true
		elseif(structMemberName=="top")then
			val=structVal.top
			isSuc=true
		elseif(structMemberName=="width")then
			val=structVal.width
			isSuc=true
		elseif(structMemberName=="height")then
			val=structVal.height
			isSuc=true
		end
	end
	--斜距形矩形	x	y	angle	width		height
	if(type==cyDType.cyDT_RotatedRect)then
		if(structMemberName=="x")then
			val=structVal.x
			isSuc=true
		elseif(structMemberName=="y")then
			val=structVal.y
			isSuc=true
		elseif(structMemberName=="angle")then
			val=structVal.angle
			isSuc=true
		elseif(structMemberName=="width")then
			val=structVal.width
			isSuc=true
		elseif(structMemberName=="height")then
			val=structVal.height
			isSuc=true
		end
	end
	--圆形	x	y	radius
	if(type==cyDType.cyDT_Circle)then
		if(structMemberName=="x")then
			val=structVal.x
			isSuc=true
		elseif(structMemberName=="y")then
			val=structVal.y
			isSuc=true
		elseif(structMemberName=="radius")then
			val=structVal.radius
			isSuc=true
		end
	end
	--范围
	if(type==cyDType.cyDT_Range)then
		if(structMemberName=="min")then
			val=structVal.min
			isSuc=true
		elseif(structMemberName=="max")then
			val=structVal.max
			isSuc=true
		end
	end	
	return isSuc,val
end

--说明: 设置结构数据中指定元素的值
--输入		structVal		需要获取的结构体数据	CMvVariant
--输入		structMemberName		指定的元素		字符串
--输入		val			需要修改的值
--返回值		isSuc		获取是否成功		布尔值
function PublicDataFunc:SetValInStruct(structVal,structMemberName,val)
	local isSuc=false
	local type=structVal:getDataType()
	--点	x	y
	if(type==cyDType.cyDT_RealPoint)then
		if(structMemberName=="x")then
			structVal.x=val
			isSuc=true
		elseif(structMemberName=="y")then
			structVal.y=val
			isSuc=true
		end
	end
	--姿态	x	y	angle
	if(type==cyDType.cyDT_Posture)then
		if(structMemberName=="x")then
			structVal.x=val
			isSuc=true
		elseif(structMemberName=="y")then
			structVal.y=val
			isSuc=true
		elseif(structMemberName=="angle")then
			structVal.angle=val
			isSuc=true
		end
	end
	--直线	xStart	yStart	xEnd	yEnd
	if(type==cyDType.cyDT_Line)then
		if(structMemberName=="xStart")then
			structVal.xStart=val
			isSuc=true
		elseif(structMemberName=="yStart")then
			structVal.yStart=val
			isSuc=true
		elseif(structMemberName=="xEnd")then
			structVal.xEnd=val
			isSuc=true
		elseif(structMemberName=="yEnd")then
			structVal.yEnd=val
			isSuc=true
		end
	end
	--矩形	left	top	width		height
	if(type==cyDType.cyDT_Rect)then
		if(structMemberName=="left")then
			structVal.left=val
			isSuc=true
		elseif(structMemberName=="top")then
			structVal.top=val
			isSuc=true
		elseif(structMemberName=="width")then
			structVal.width=val
			isSuc=true
		elseif(structMemberName=="height")then
			structVal.height=val
			isSuc=true
		end
	end
	--斜距形矩形	x	y	angle	width		height
	if(type==cyDType.cyDT_RotatedRect)then
		if(structMemberName=="x")then
			structVal.x=val
			isSuc=true
		elseif(structMemberName=="y")then
			structVal.y=val
			isSuc=true
		elseif(structMemberName=="angle")then
			structVal.angle=val
			isSuc=true
		elseif(structMemberName=="width")then
			structVal.width=val
			isSuc=true
		elseif(structMemberName=="height")then
			structVal.height=val
			isSuc=true
		end
	end
	--圆形	x	y	radius
	if(type==cyDType.cyDT_Circle)then
		if(structMemberName=="x")then
			structVal.x=val
			isSuc=true
		elseif(structMemberName=="y")then
			structVal.y=val
			isSuc=true
		elseif(structMemberName=="radius")then
			structVal.radius=val
			isSuc=true
		end
	end
	--范围
	if(type==cyDType.cyDT_Range)then
		if(structMemberName=="min")then
			structVal.min=val
			isSuc=true
		elseif(structMemberName=="max")then
			structVal.max=val
			isSuc=true
		end
	end	
	return isSuc
end

--说明: 获取数组数据中指定index的值
--输入		structVal		需要获取的数组数据	CMvVariant
--输入		index		指定的index		整数
--返回值		error		获取是否成功		0--成功;-1--不是数组;-2--index越界
--返回值		val			指定元素的值
function PublicDataFunc:GetValInArray(arrayVal,index)
	local error=0	
	local val=CMvVariant()
	if(not arrayVal:isArray())then
		error=-1
	else
		local len=arrayVal:length()
		if(index>=0 and index<len)then
			val=arrayVal:get(index)
		else
			error=-2
		end
	end
	return error,val
end

--说明: 获取数组数据中指定index的值
--输入		structVal		需要获取的数组数据	CMvVariant
--输入		index		指定的index		整数
--返回值		val			需要设置的值
--返回值		error		获取是否成功		0--成功;-1--不是数组;-2--index越界
function PublicDataFunc:SetValInArray(arrayVal,index,val)
	local error=0	
	if(not arrayVal:isArray())then
		error=-1
	else
		local len=arrayVal:length()
		if(index>=0 and index<len)then
			arrayVal:set(index,val)
		else
			error=-2
		end
	end
	return error
end
--说明: 获取结构类型全局变量中指定元素的值
--输入		blockName		全局变量所在块名称		字符串
--输入		varName		全局变量名称		字符串
--输入		structMemberName		指定的元素		字符串
--返回值		isSuc		获取是否成功		0--成功；-1--不存在全局变量；-2--全局变量无效；-3--输入的指定的元素错误
--返回值		val			指定元素的值
function PublicDataFunc:ReadStructGlobalVal(blockName,varName,structMemberName)
	local error=0 	
	local val=CMvVariant()
	local isExit=LuaGlobalVar:IsExistGlobal(blockName,varName)
	if(not isExit)then
		error=-1
	else
		local isValid=LuaGlobalVar:IsValidGlobal(blockName,varName)
		if(not isValid)then
			error=-2
		else
			local globalVal=CMvVariant()
			LuaGlobalVar:ReadGlobal(blockName,varName,globalVal)
			local isSuc
			isSuc,val=self:GetValInStruct(globalVal,structMemberName)
			if(not isSuc)then
				error=-3
			end
		end
	end
	return error,val
end

--说明: 设置结构类型全局变量中指定元素的值
--输入		blockName		全局变量所在块名称		字符串
--输入		varName		全局变量名称		字符串
--输入		structMemberName		指定的元素		字符串
--返回值		val			指定元素的值
--返回值		isSuc		获取是否成功		0--成功；-1--不存在全局变量；-2--全局变量无效；-3--输入的指定的元素错误
function PublicDataFunc:WriteStructGlobalVal(blockName,varName,structMemberName,val)	
	local error=0 	
	local isExit=LuaGlobalVar:IsExistGlobal(blockName,varName)
	if(not isExit)then
		error=-1
	else
		local isValid=LuaGlobalVar:IsValidGlobal(blockName,varName)
		if(not isValid)then
			error=-2
		else
			local globalVal=CMvVariant()
			LuaGlobalVar:ReadGlobal(blockName,varName,globalVal)
			local isSuc=self:SetValInStruct(globalVal,structMemberName,val)
			if(not isSuc==0)then
				error=-3
			else
				LuaGlobalVar:WriteGlobal(blockName,varName,globalVal)
			end
		end
	end
	return error
end




--说明: 获取结构类型全局变量中指定index的值
--输入		blockName		全局变量所在块名称		字符串
--输入		varName		全局变量名称		字符串
--输入		index		指定的index，从0开始		整数
--返回值		isSuc		获取是否成功		0--成功；-1--不存在全局变量；-2--全局变量无效；-3--全局变量不是数组类型；-4--index越界
--返回值		val			指定元素的值
function PublicDataFunc:ReadArrayGlobalVal(blockName,varName,index)
	local error=0 	
	local val=CMvVariant()
	local isExit=LuaGlobalVar:IsExistGlobal(blockName,varName)
	if(not isExit)then
		error=-1
	else
		local isValid=LuaGlobalVar:IsValidGlobal(blockName,varName)
		if(not isValid)then
			error=-2
		else
			local globalVal=CMvVariant()
			LuaGlobalVar:ReadGlobal(blockName,varName,globalVal)
			local error
			error,val=self:GetValInStruct(globalVal,index)
			if(error==-1)then
				error=-3
			elseif(error==-2)then
				error=-4
			end
		end
	end
	return error,val
end

--说明: 设置结构类型全局变量中指定元素的值
--输入		blockName		全局变量所在块名称		字符串
--输入		varName		全局变量名称		字符串
--输入		index		指定的index		整数
--返回值		val			指定元素的值
--返回值		isSuc		获取是否成功		0--成功；-1--不存在全局变量；-2--全局变量无效；-3--输入的指定的元素错误
function PublicDataFunc:WriteArrayGlobalVal(blockName,varName,index,val)	
	local error=0 	
	local isExit=LuaGlobalVar:IsExistGlobal(blockName,varName)
	if(not isExit)then
		error=-1
	else
		local isValid=LuaGlobalVar:IsValidGlobal(blockName,varName)
		if(not isValid)then
			error=-2
		else
			local globalVal=CMvVariant()
			LuaGlobalVar:ReadGlobal(blockName,varName,globalVal)
			local isSuc=self:SetValInArray(globalVal,index,val)
			if(not isSuc==0)then
				error=-3
			else
				LuaGlobalVar:WriteGlobal(blockName,varName,globalVal)
			end
		end
	end
	return error
end

return PublicDataFunc